﻿using System;
using System.Linq;
using System.Windows.Forms;
using Sispe.Entities;
using Sispe.BussinesLogic;
using Microsoft.Practices.Unity;

namespace Sispe.UI
{
    public partial class FrmMttoProyecto : Form
    {
        [Dependency]
        public IProyectoBL proyectoBL { get; set; }

        [Dependency]
        public IClienteBL ClienteBL { get; set; }

        [Dependency]
        public IUbicacionPoryectoBL ubicacionProyectoBL { get; set; }


        [Dependency]
        public IProyetcoCOntactoBL proyectoContactoBL { get; set; }

        public FrmMttoProyecto()
        {
            InitializeComponent();
            this.BuildUp();
        }

        bool isNew;

        //public PROYECTO _proyecto { get; set; }

        public void AddProyecto()
        {
            isNew = true;
            pROYECTOBindingSource.AddNew();

       }
        

        public void UpdateProyecto(int idproy)
        {
            var currentProy= proyectoBL.GetFromProyectoById(idproy);
            currentProy.CLIENTE = ClienteBL.GetFromClienteById(currentProy.IdCliente);
            currentProy.UBICACION_PROYECTO = ubicacionProyectoBL.GetFromUbicacionProyectoById(currentProy.IdUbicacionProyecto);
            currentProy.PROYECTO_CONTACTO = proyectoContactoBL.GetAllFromProyectoContactosByProyectoId(currentProy.IdProyecto);

            
            pROYECTOBindingSource.DataSource = currentProy;
            codigoProyectoTextBox.Enabled = true;
            nombreProyectoTextBox.Enabled = true;
            observacionTextBox.Enabled = true;
            presupuestoTextBox.Enabled = true;
            fechaInicioDateTimePicker.Enabled = true;
            fechaTerminoDateTimePicker.Enabled = true;
            btnBuscarCliente.Enabled = true;
            btnBuscarUbicacion.Enabled = true;
            btnAddContacto.Enabled = true;
        }

        public void CargarCliente()
        {
            FrmCliente frm = new FrmCliente();
            frm.Extend();
            frm.ShowDialog();

            if (frm.currentCliente != null)
            {
                var nuevoCliente = ClienteBL.GetFromClienteById(frm.currentCliente.IdCliente);
                var cliente = pROYECTOBindingSource.Current as PROYECTO;
                cliente.CLIENTE = nuevoCliente;
                cliente.IdCliente = nuevoCliente.IdCliente;
                pROYECTOBindingSource.ResetBindings(true);
            }

        }

       

        public void CargarUbicacion()
        {
            FrmUbicacionProyecto frm = new FrmUbicacionProyecto();
            frm.Extend();
            frm.ShowDialog();

            if (frm.CurrentUbicacion != null)
            {
                var nuevaUbicacionProy = ubicacionProyectoBL.GetFromUbicacionProyectoById(frm.CurrentUbicacion.IdUbicacion);
                var ubicacionProy = pROYECTOBindingSource.Current as PROYECTO;
                ubicacionProy.UBICACION_PROYECTO = nuevaUbicacionProy;
                ubicacionProy.IdUbicacionProyecto = nuevaUbicacionProy.IdUbicacion;
                pROYECTOBindingSource.ResetBindings(true);
            }

        }

        public void verificaCodigo()
        {
            if (isNew == true)
            {
                if (codigoProyectoTextBox.Text != string.Empty)
                {

                    if ((codigoProyectoTextBox.Text).Length == 4)
                    {
                        var proyecto = proyectoBL.GetFromProyectoByCodigo(codigoProyectoTextBox.Text);
                        var proy = pROYECTOBindingSource.Current as PROYECTO;
                        if (proyecto != null)
                        {
                            proy.CodigoProyecto = proyecto.CodigoProyecto;
                            proy.NombreProyecto = proyecto.NombreProyecto;
                            proy.Observacion = proyecto.Observacion;
                            proy.Presupuesto = proyecto.Presupuesto;
                            proy.IdProyecto = proyecto.IdProyecto;

                            MessageBox.Show("Proyecto no Disponible", "Mensaje",
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
                            //Close();
                        }
                        else
                        {
                            MessageBox.Show("Proyecto Disponible", "Mensaje",
                                MessageBoxButtons.OK, MessageBoxIcon.Information);

                            codigoProyectoTextBox.ReadOnly = false;
                            nombreProyectoTextBox.Enabled = true;
                            observacionTextBox.Enabled = true;
                            presupuestoTextBox.Enabled = true;
                            fechaInicioDateTimePicker.Enabled = true;
                            fechaTerminoDateTimePicker.Enabled = true;
                            btnBuscarCliente.Enabled = true;
                            btnBuscarUbicacion.Enabled = true;
                            btnAddContacto.Enabled = true;

                        }
                    }


                    else
                    {
                        MessageBox.Show("Código necesita 4 dígitos", "Mensaje",
                            MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                else
                {
                    MessageBox.Show("Debe ingresar el código", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);

                }
            }
            if (isNew == false)
            {
                if (codigoProyectoTextBox.Text != string.Empty)
                {
                     if ((codigoProyectoTextBox.Text).Length == 4)
                {
                    var proyecto = proyectoBL.GetFromProyectoByCodigo(codigoProyectoTextBox.Text);
                    var proy = pROYECTOBindingSource.Current as PROYECTO;
                    if (proyecto != null)
                    {
                        proy.CodigoProyecto = proyecto.CodigoProyecto;
                        proy.NombreProyecto = proyecto.NombreProyecto;
                        proy.Observacion = proyecto.Observacion;
                        proy.Presupuesto = proyecto.Presupuesto;
                        proy.IdProyecto = proyecto.IdProyecto;

                        MessageBox.Show("Proyecto no Disponible", "Mensaje",
                            MessageBoxButtons.OK, MessageBoxIcon.Information);
                        //Close();
                    }
                    else
                    {
                        MessageBox.Show("Proyecto Disponible", "Mensaje",
                            MessageBoxButtons.OK, MessageBoxIcon.Information);

                        codigoProyectoTextBox.ReadOnly = false;
                        nombreProyectoTextBox.Enabled = true;
                        observacionTextBox.Enabled = true;
                        presupuestoTextBox.Enabled = true;
                        fechaInicioDateTimePicker.Enabled = true;
                        fechaTerminoDateTimePicker.Enabled = true;
                        btnBuscarCliente.Enabled = true;
                        btnBuscarUbicacion.Enabled = true;
                    }
                }
                else
                {
                    MessageBox.Show("Código necesita 4 dígitos", "Mensaje",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                }
                else
                {
                    MessageBox.Show("Debe ingresar el código", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);

                }
            }
        }

       

        private void FrmMttoProyecto_Load(object sender, EventArgs e)
        {

        }

        private void btnAddContacto_Click_1(object sender, EventArgs e)
        {
            var _proyecto = pROYECTOBindingSource.Current as PROYECTO;
            CONTACTO_PROYECTO currentCOntacto = pROYECTO_CONTACTOBindingSource1.Current as CONTACTO_PROYECTO;
            FrmContactoProyecto frm = new FrmContactoProyecto();
            frm.Extend();
            frm.ShowDialog();
            if (frm.currentContactoProyecto != null)
            {
                currentCOntacto = frm.currentContactoProyecto;

                var _contacto = new PROYECTO_CONTACTO
                {
                    ProyectoId = _proyecto.IdProyecto,
                    ContactoId = currentCOntacto.IdContacto,
                    CONTACTO_PROYECTO = currentCOntacto
                };

                
                
                
                var existe = _proyecto.PROYECTO_CONTACTO.Where(p => p.CONTACTO_PROYECTO.IdContacto.Equals(_contacto.ContactoId)).SingleOrDefault();
                if (existe == null)
                {
                    _proyecto.PROYECTO_CONTACTO.Add(_contacto);
                    pROYECTO_CONTACTOBindingSource1.ResetBindings(true);
                pROYECTOBindingSource.ResetBindings(true);
                }
                else
                {
                    var rpt = MessageBox.Show(this, string.Format("El contacto {0}, " + "ya se agregó", currentCOntacto.Nombre),
                                       "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                }
            }
        }

        private void btnVerificar_Click(object sender, EventArgs e)
        {
            verificaCodigo();
        }

        private void btnBuscarUbicacion_Click_2(object sender, EventArgs e)
        {
            CargarUbicacion();
        }

        private void btnBuscarCliente_Click_2(object sender, EventArgs e)
        {
            CargarCliente();
        }

        private void btnGuardar_Click_1(object sender, EventArgs e)
        {
            PROYECTO proyecto = pROYECTOBindingSource.Current as PROYECTO;
            var msg = "ERROR";

            var fechaIni = Convert.ToDateTime(fechaInicioDateTimePicker.Value.Date.ToShortDateString());
            var fechaFin = Convert.ToDateTime(fechaTerminoDateTimePicker.Value.Date.ToShortDateString());

            if (proyecto != null)
            {
                if (codigoProyectoTextBox.Text != string.Empty)
                    {
                        if (codigoProyectoTextBox.Text.Length == 4)
                        {
                            if (fechaFin >= fechaIni)
                            {
                                    if (isNew == true)
                                    {
                                        try
                                        {
                                            proyecto.FechaInicio = fechaIni;
                                            proyecto.FechaTermino = fechaFin;
                                            proyecto.NombreProyecto = nombreProyectoTextBox.Text.ToUpper();
                                            proyecto.Observacion = observacionTextBox.Text.ToUpper();
                                            proyectoBL.AddProyecto(proyecto);
                                            MessageBox.Show("Registro Correcto", "Mensaje",
                                            MessageBoxButtons.OK, MessageBoxIcon.Information);
                                            Close();
                                        }
                                        catch (Exception ex)
                                        {

                                            msg = ex.Message;

                                            MessageBox.Show(msg, "Mensaje",
                                            MessageBoxButtons.OK, MessageBoxIcon.Information);

                                        }
                                    }
                                    if (isNew == false)
                                    {
                                        try
                                        {
                                            proyecto.NombreProyecto = nombreProyectoTextBox.Text.ToUpper();
                                            proyecto.Observacion = observacionTextBox.Text.ToUpper();
                                            proyectoBL.UpdateProyecto(proyecto);
                                            MessageBox.Show("Modificación Correcta", "Mensaje",
                                            MessageBoxButtons.OK, MessageBoxIcon.Information);
                                            Close();
                                        }
                                        catch (Exception ex)
                                        {

                                            msg = ex.Message;
                                            MessageBox.Show(msg, "Mensaje",
                                            MessageBoxButtons.OK, MessageBoxIcon.Information);
                                        }
                                    }
                            }

                            else
                            {
                                MessageBox.Show("La Fecha de Término no puede ser anterior a la Fecha de Inicio", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Error);

                            }
                        }
                        else
                        {
                            MessageBox.Show("El código del proyecto debe tener 4 dígitos", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }

                    }
                else
                {
                    MessageBox.Show("Debe ingresar el código", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }

            }
        }

        private void pROYECTO_CONTACTODataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            var _contacto = pROYECTO_CONTACTOBindingSource1.Current as PROYECTO_CONTACTO;

            if (_contacto != null)
            {
                if (this.pROYECTO_CONTACTODataGridView1.Columns[e.ColumnIndex].Name.Equals("Quitar"))
                {
                    var rpt = MessageBox.Show(this, string.Format("¿Desea quitar el Contacto: {0}?", _contacto.CONTACTO_PROYECTO.Nombre),
                        "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                    if (rpt == DialogResult.Yes)
                    {
                        if (_contacto.Id > 0)
                        {
                            proyectoContactoBL.RemoveProyectoContactoByProyectoIdContactoId(_contacto.ProyectoId, _contacto.ContactoId);
                        }
                        pROYECTO_CONTACTOBindingSource1.RemoveCurrent();
                        pROYECTO_CONTACTOBindingSource1.ResetBindings(true);
                    }
                }
            }
        }

        private void codigoProyectoTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsNumber(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void nombreProyectoTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            var coma = Convert.ToString(",");
            var punto = Convert.ToString(".");
            var parentesis = Convert.ToString("()");
            var puntoComa = Convert.ToString(";");
            var barra = Convert.ToString("/");

            string cadena = coma + punto + parentesis + puntoComa + barra + (char)8;

            if (Char.IsLetter(e.KeyChar) || cadena.Contains(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void observacionTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            var coma = Convert.ToString(",");
            var punto = Convert.ToString(".");
            var parentesis = Convert.ToString("()");
            var puntoComa = Convert.ToString(";");
            var barra = Convert.ToString("/");

            string cadena = coma + punto + parentesis + puntoComa + barra + (char)8;

            if (Char.IsLetter(e.KeyChar)|| cadena.Contains(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void presupuestoTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            var coma = Convert.ToString(",");
            string cad = coma;

            if (Char.IsDigit(e.KeyChar) || cad.Contains(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void codigoProyectoTextBox_KeyDown_1(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                verificaCodigo();
            }
        }

        private void codigoProyectoTextBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.KeyCode == Keys.Tab)
            {
                verificaCodigo();
            }
        }
       
      
    }
}
